package controller

import (
	"VideoManageSystem/internal/initConfig"
	"VideoManageSystem/internal/service"
	"errors"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

func ChangePassword(c *gin.Context) {
	var userInput struct {
		ID       string `json:"id"`
		Password string `json:"password"`
	}

	if err := c.ShouldBindJSON(&userInput); err != nil {
		c.JSON(400, gin.H{
			"code":    400,
			"message": "请求参数错误；错误：" + err.Error(),
		})
		return
	}

	// 根据ID查询用户是否存在，并获取用户信息
	user, err := service.GetUserByID(userInput.ID)
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			c.JSON(403, gin.H{
				"code":    1,
				"message": "该账号不存在；错误：" + err.Error(),
			})
		} else {
			c.JSON(500, gin.H{
				"code":    500,
				"message": "服务器内部错误，无法修改密码，请稍后再试；错误：" + err.Error(),
			})
		}
		return
	}

	// 加密密码
	hashedPassword, err := service.EncryptPassword(userInput.Password)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法修改密码，请稍后再试；错误：" + err.Error(),
		})
		return
	}

	// 更新用户密码
	user.Password = string(hashedPassword)
	result := initConfig.GormDb.Save(&user)
	if result.Error != nil {
		zap.L().Error("更新用户密码失败", zap.String("userID", userInput.ID), zap.Error(result.Error))
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法保存新密码，请稍后再试；错误：" + result.Error.Error(),
		})
		return
	}

	// 返回成功响应
	c.JSON(200, gin.H{
		"code":    200,
		"message": "密码修改成功",
	})
}
